package com.lyr.swagger3test.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class OpenApiConfig {
    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
                .info(new Info()
                        .title("LYR API")
                        .version("1.0")
                        .description("这是我的应用API文档")
                        .contact(new Contact()
                                .name("技术支持")
                                .email("support@example.com")));
    }

    @Bean
    public GroupedOpenApi userApi() {

        return GroupedOpenApi.builder()
                .group("users")
                .pathsToMatch("/api/users/**")
                .build();
    }


    // 版本v1 API分组
    @Bean
    public GroupedOpenApi apiV1() {
        return GroupedOpenApi.builder()
                .group("v1")
                .pathsToMatch("/api/v1/**")  // 匹配所有v1版本接口
                .build();
    }

    // 版本v2 API分组
    @Bean
    public GroupedOpenApi apiV2() {
        return GroupedOpenApi.builder()
                .group("v2")
                .pathsToMatch("/api/v2/**")  // 匹配所有v2版本接口
                .build();
    }




    // 用户管理模块分组
    @Bean
    public GroupedOpenApi userApi2() {
        return GroupedOpenApi.builder()
                .group("用户管理")  // 分组名称（显示在Swagger UI下拉菜单）
                .pathsToMatch("/api/v1/users/**", "/api/v1/auth/**")  // 匹配的API路径
                .pathsToExclude("/api/v1/users/internal/**")  // 排除内部接口
                .addOpenApiCustomizer(openApi ->
                        openApi.info(new Info().title("用户管理API").description("用户注册、登录、信息管理等接口"))
                )
                .build();
    }

    // 订单管理模块分组
    @Bean
    public GroupedOpenApi orderApi() {
        return GroupedOpenApi.builder()
                .group("订单管理")
                .pathsToMatch("/api/v1/orders/**", "/api/v1/carts/**")
                .addOpenApiCustomizer(openApi ->
                        openApi.info(new Info().title("订单管理API").description("订单创建、支付、物流等接口"))
                )
                .build();
    }

    // 商品管理模块分组
    @Bean
    public GroupedOpenApi productApi() {
        return GroupedOpenApi.builder()
                .group("商品管理")
                .pathsToMatch("/api/v1/products/**", "/api/v1/categories/**")
                .addOpenApiCustomizer(openApi ->
                        openApi.info(new Info().title("商品管理API").description("商品CRUD、库存管理等接口"))
                )
                .build();
    }


    // 管理员接口分组
    @Bean
    public GroupedOpenApi adminApi() {
        return GroupedOpenApi.builder()
                .group("管理员接口")
                .pathsToMatch("/api/admin/**")
                .addOpenApiCustomizer(openApi ->
                        openApi.info(new Info().title("管理员专用API").description("需管理员权限访问的接口"))
                )
                .build();
    }

    // 第三方集成接口分组
    @Bean
    public GroupedOpenApi thirdPartyApi() {
        return GroupedOpenApi.builder()
                .group("第三方集成")
                .pathsToMatch("/api/third-party/**")
                .build();
    }
}